require(openxlsx)
require(ggplot2)
require(data.table)
require(skimr)
require(GGally)
require(ggcorrplot)
require(forecast)
require(lubridate)
require(repr)
require(lmtest)
options(repr.plot.width=12.7, repr.plot.height=8.5)
data_path = '/Users/ahmetceliker/Desktop/IE 360 HW1/toplamkredihacmi.xlsx'
kredi=read.xlsx(data_path,sheet='data')
str(kredi)
'data.frame':   157 obs. of  2 variables:
 $ KrediHacmi      : num  186455 360381 315900 359423 330227 ...
 $ MevduatFaizOrani: num  16.2 16.5 16.8 17.8 17.9 ...
summary_data=skim(kredi)
print(summary_data)
── Data Summary ────────────────────────
                           Values
Name                       kredi 
Number of rows             157   
Number of columns          2     
_______________________          
Column type frequency:           
  numeric                  2     
________________________         
Group variables            None  
kredi=data.table(kredi)
str(kredi)
Classes ‘data.table’ and 'data.frame':  157 obs. of  2 variables:
 $ KrediHacmi      : num  186455 360381 315900 359423 330227 ...
 $ MevduatFaizOrani: num  16.2 16.5 16.8 17.8 17.9 ...
 - attr(*, ".internal.selfref")=<externalptr> 
correl_info=cor(kredi)

ggcorrplot(correl_info, 
           hc.order = TRUE, 
           type = "lower",
           lab = TRUE)

ggplot(kredi, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point()

l_fit = lm(KrediHacmi~.,data=kredi)
l_fit

Call:
lm(formula = KrediHacmi ~ ., data = kredi)

Coefficients:
     (Intercept)  MevduatFaizOrani  
        -2001352            155139  
summary(l_fit)

Call:
lm(formula = KrediHacmi ~ ., data = kredi)

Residuals:
     Min       1Q   Median       3Q      Max 
-2168190  -370139    17706   239810  3060022 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)      -2001352     147478  -13.57   <2e-16 ***
MevduatFaizOrani   155139       6034   25.71   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 729800 on 155 degrees of freedom
Multiple R-squared:  0.8101,    Adjusted R-squared:  0.8089 
F-statistic: 661.1 on 1 and 155 DF,  p-value: < 2.2e-16
plot(l_fit)

NA

ggplot(kredi, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point() +geom_smooth(method='lm')

ggplot(kredi, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point()+geom_smooth(method='loess')

summary(l_fit)

Call:
lm(formula = KrediHacmi ~ ., data = kredi)

Residuals:
     Min       1Q   Median       3Q      Max 
-2168190  -370139    17706   239810  3060022 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)      -2001352     147478  -13.57   <2e-16 ***
MevduatFaizOrani   155139       6034   25.71   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 729800 on 155 degrees of freedom
Multiple R-squared:  0.8101,    Adjusted R-squared:  0.8089 
F-statistic: 661.1 on 1 and 155 DF,  p-value: < 2.2e-16
kredi[, trnd := 1:.N]
head(kredi)
lm_trend=lm(KrediHacmi~trnd,kredi)
summary(lm_trend)

Call:
lm(formula = KrediHacmi ~ trnd, data = kredi)

Residuals:
     Min       1Q   Median       3Q      Max 
-2188841  -887412   -99229   659532  3394148 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -737087     172915  -4.263  3.5e-05 ***
trnd           28095       1899  14.798  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1078000 on 155 degrees of freedom
Multiple R-squared:  0.5855,    Adjusted R-squared:  0.5829 
F-statistic:   219 on 1 and 155 DF,  p-value: < 2.2e-16
# New Model with Trend
l_fit_trend <- lm(KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi)

# Summary of New Model with Trend
summary(l_fit_trend)

Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi)

Residuals:
     Min       1Q   Median       3Q      Max 
-2281143  -139800      865   180901  2974794 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)      -1994883     141514  -14.10  < 2e-16 ***
MevduatFaizOrani   129646       8874   14.61  < 2e-16 ***
trnd                 7165       1890    3.79 0.000216 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 700300 on 154 degrees of freedom
Multiple R-squared:  0.8263,    Adjusted R-squared:  0.824 
F-statistic: 366.3 on 2 and 154 DF,  p-value: < 2.2e-16
bptest(l_fit_trend)

    studentized Breusch-Pagan test

data:  l_fit_trend
BP = 39.006, df = 2, p-value = 3.387e-09
ggplot(kredi, aes(x = MevduatFaizOrani, y = KrediHacmi)) +
  geom_point() +
  geom_smooth(
    aes(y = predict(l_fit_trend, newdata = data.frame(MevduatFaizOrani = kredi$MevduatFaizOrani, trnd = kredi$trnd))),
    method = 'lm',
    color = 'blue',
    linetype = 'solid'
  )

checkresiduals(l_fit_trend$residuals)

    Ljung-Box test

data:  Residuals
Q* = 273.67, df = 10, p-value < 2.2e-16

Model df: 0.   Total lags used: 10

require(tseries)
adf.test(kredi$KrediHacmi)

    Augmented Dickey-Fuller Test

data:  kredi$KrediHacmi
Dickey-Fuller = -1.9459, Lag order = 5, p-value = 0.5989
alternative hypothesis: stationary
adf.test(l_fit_trend$residuals)

    Augmented Dickey-Fuller Test

data:  l_fit_trend$residuals
Dickey-Fuller = -3.2027, Lag order = 5, p-value = 0.08997
alternative hypothesis: stationary
summary(kredi)
   KrediHacmi      MevduatFaizOrani      trnd    
 Min.   :  76672   Min.   :14.99    Min.   :  1  
 1st Qu.: 531439   1st Qu.:16.31    1st Qu.: 40  
 Median : 755564   Median :17.87    Median : 79  
 Mean   :1482443   Mean   :22.46    Mean   : 79  
 3rd Qu.:1144085   3rd Qu.:24.81    3rd Qu.:118  
 Max.   :6421834   Max.   :47.82    Max.   :157  
str(kredi)
Classes ‘data.table’ and 'data.frame':  157 obs. of  3 variables:
 $ KrediHacmi      : num  186455 360381 315900 359423 330227 ...
 $ MevduatFaizOrani: num  16.2 16.5 16.8 17.8 17.9 ...
 $ trnd            : int  1 2 3 4 5 6 7 8 9 10 ...
 - attr(*, ".internal.selfref")=<externalptr> 
# Differencing the relevant variables
kredi_diff <- kredi[, lapply(.SD, diff), .SDcols = c("KrediHacmi", "MevduatFaizOrani")]
# Checking the first few rows of the differenced dataset
head(kredi_diff)

# Model without trend and with differencing
l_fit_diff_simple <- lm(KrediHacmi ~ MevduatFaizOrani, data = kredi_diff)

# Summary of the model
summary(l_fit_diff_simple)

Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani, data = kredi_diff)

Residuals:
     Min       1Q   Median       3Q      Max 
-2715376  -111746   -35167    74200  2562642 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)
(Intercept)         36857      45218   0.815    0.416
MevduatFaizOrani   -67273      50969  -1.320    0.189

Residual standard error: 549900 on 154 degrees of freedom
Multiple R-squared:  0.01119,   Adjusted R-squared:  0.004765 
F-statistic: 1.742 on 1 and 154 DF,  p-value: 0.1888
ggplot(kredi_diff, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point() +geom_smooth(method='lm')

# Applying log transformation to KrediHacmi variable
kredi$KrediHacmi <- log(kredi$KrediHacmi + 1)  # Adding 1 to avoid log(0) errors

# Fit a new model with the log-transformed KrediHacmi variable
l_fit_log <- lm(KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi)

# Summary of the new model with the log-transformed KrediHacmi variable
summary(l_fit_log)

Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.61144 -0.08962  0.03193  0.14094  0.82966 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      1.198e+01  6.563e-02 182.588  < 2e-16 ***
MevduatFaizOrani 3.537e-02  4.116e-03   8.595 8.78e-15 ***
trnd             1.224e-02  8.766e-04  13.961  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3247 on 154 degrees of freedom
Multiple R-squared:  0.873, Adjusted R-squared:  0.8714 
F-statistic: 529.5 on 2 and 154 DF,  p-value: < 2.2e-16
checkresiduals(l_fit_log)

    Breusch-Godfrey test for serial correlation of order up to 10

data:  Residuals
LM test = 61.484, df = 10, p-value = 1.896e-09

adf.test(kredi$KrediHacmi)

    Augmented Dickey-Fuller Test

data:  kredi$KrediHacmi
Dickey-Fuller = -2.0239, Lag order = 5, p-value = 0.5664
alternative hypothesis: stationary
adf.test(l_fit_log$residuals)

    Augmented Dickey-Fuller Test

data:  l_fit_log$residuals
Dickey-Fuller = -2.9294, Lag order = 5, p-value = 0.1889
alternative hypothesis: stationary
ggplot(kredi_diff, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point() +geom_smooth(method='lm')

weights <- 1 / abs(l_fit_log$residuals)
l_fit_wls <- lm(KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi, weights = weights)
summary(l_fit_wls)

Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi, 
    weights = weights)

Weighted Residuals:
    Min      1Q  Median      3Q     Max 
-1.2845 -0.3146  0.1517  0.3611  0.9091 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      1.199e+01  2.034e-02  589.44   <2e-16 ***
MevduatFaizOrani 3.632e-02  1.293e-03   28.09   <2e-16 ***
trnd             1.194e-02  2.802e-04   42.61   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4589 on 154 degrees of freedom
Multiple R-squared:  0.9829,    Adjusted R-squared:  0.9826 
F-statistic:  4416 on 2 and 154 DF,  p-value: < 2.2e-16
checkresiduals(l_fit_wls)

    Breusch-Godfrey test for serial correlation of order up to 10

data:  Residuals
LM test = 61.484, df = 10, p-value = 1.896e-09

kredi$week_number <- seq(1, nrow(kredi))
head(kredi,50)
plot(log10(abs(fft_kredi)), main = "Kredi Hacmi DFT (Logaritmik)", xlab = "Frekans", ylab = "Genlik")

NA
NA
plot(l_fit_wls)

acf(l_fit_wls$residuals,200)

mean(l_fit_wls$residuals)
[1] -0.006567294
cor(l_fit_wls$residuals, kredi$MevduatFaizOrani)
[1] 0.003459535
cor(l_fit_wls$residuals, kredi$trnd)
[1] 0.02051802
#to find seasonality index
ggplot(kredi[week_number>1 & week_number<300] ,aes(x=week_number)) +
        geom_line(aes(y=KrediHacmi,color='real'))


data_to_plot <- kredi
y_label <- "Kredi Hacmi"
ggplot(data_to_plot, aes(x = trnd, y = KrediHacmi)) +
  geom_point(size = 3) +  # Adjust point size as desired
  labs(title = "Trend vs. Kredi Hacmi",
       x = "Trend",
       y = y_label)

NA
#monthly seasonality with lag of 20) fourier seris

kredi$seasonality_sin <- sin(2*pi * ((kredi$week_number - 1) %% 20) / 20)  # Her 20 haftada bir sinüs mevsimsellik
kredi$seasonality_cos <- cos(2*pi * ((kredi$week_number - 1) %% 20) / 20)  # Her 20 haftada bir kosinüs mevsimsellik

l_fit_wls_fourier <- lm(KrediHacmi ~ MevduatFaizOrani + trnd + seasonality_sin + seasonality_cos, data = kredi, weights = weights)
summary(l_fit_wls_fourier)

Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd + seasonality_sin + 
    seasonality_cos, data = kredi, weights = weights)

Weighted Residuals:
    Min      1Q  Median      3Q     Max 
-1.2873 -0.3189  0.1385  0.3597  0.9079 

Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)      11.9913211  0.0204989 584.975   <2e-16 ***
MevduatFaizOrani  0.0363616  0.0013157  27.636   <2e-16 ***
trnd              0.0119437  0.0002844  42.000   <2e-16 ***
seasonality_sin  -0.0014364  0.0124132  -0.116    0.908    
seasonality_cos   0.0029665  0.0121175   0.245    0.807    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4618 on 152 degrees of freedom
Multiple R-squared:  0.9829,    Adjusted R-squared:  0.9824 
F-statistic:  2180 on 4 and 152 DF,  p-value: < 2.2e-16
checkresiduals(l_fit_wls_fourier)

    Breusch-Godfrey test for serial correlation of order up to 10

data:  Residuals
LM test = 60.996, df = 10, p-value = 2.347e-09

ggplot(kredi, aes(x = MevduatFaizOrani, y = KrediHacmi)) +
  geom_point(alpha = 0.5) +  # Adjust alpha for point transparency
  geom_smooth(
    method = 'lm',
    aes(y = predict(l_fit_wls_fourier, newdata = data.frame(MevduatFaizOrani = kredi$MevduatFaizOrani, trnd = kredi$trnd, seasonality_sin = kredi$seasonality_sin, seasonality_cos = kredi$seasonality_cos))),
    color = 'blue',
    linetype = 'solid'
  ) +
  labs(title = "Fitted Model with WLS, Trend, and Fourier Features",
       x = "MevduatFaizOrani",
       y = "Kredi Hacmi")

#Checking all assumpitons of linear regression model:
# Check if mean of residuals is close to zero
mean(residuals(l_fit_wls_fourier))
[1] -0.007431915
#Check for autocorrelation in residuals
acf(residuals(l_fit_wls_fourier))

pacf(residuals(l_fit_wls_fourier))

summary(l_fit_wls_fourier)

Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd + seasonality_sin + 
    seasonality_cos, data = kredi, weights = weights)

Weighted Residuals:
    Min      1Q  Median      3Q     Max 
-1.2873 -0.3189  0.1385  0.3597  0.9079 

Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)      11.9913211  0.0204989 584.975   <2e-16 ***
MevduatFaizOrani  0.0363616  0.0013157  27.636   <2e-16 ***
trnd              0.0119437  0.0002844  42.000   <2e-16 ***
seasonality_sin  -0.0014364  0.0124132  -0.116    0.908    
seasonality_cos   0.0029665  0.0121175   0.245    0.807    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4618 on 152 degrees of freedom
Multiple R-squared:  0.9829,    Adjusted R-squared:  0.9824 
F-statistic:  2180 on 4 and 152 DF,  p-value: < 2.2e-16
checkresiduals(l_fit_wls_fourier)

    Breusch-Godfrey test for serial correlation of order up to 10

data:  Residuals
LM test = 60.996, df = 10, p-value = 2.347e-09

checkresiduals(l_fit_wls_fourier)

    Breusch-Godfrey test for serial correlation of order up to 10

data:  Residuals
LM test = 60.996, df = 10, p-value = 2.347e-09

# Include lags of residuals as predictors (adjust lags as needed)
l_fit_wls_fourier_ar <- lm(KrediHacmi ~ MevduatFaizOrani + trnd + seasonality_sin + seasonality_cos + 
                              residuals(l_fit_wls_fourier) + stats::lag(residuals(l_fit_wls_fourier), 2), 
                              data = kredi, weights = weights)

# Check autocorrelation in residuals of the new model (l_fit_wls_fourier_ar)
acf(residuals(l_fit_wls_fourier_ar))

pacf(residuals(l_fit_wls_fourier_ar))

data_path="/Users/ahmetceliker/Desktop/IE 360 HW1/arabaüretimi.xlsx"

arabafiyat=read.xlsx(data_path)
arabafiyat$Tarih <- ym(arabafiyat$Tarih)
str(arabafiyat)
'data.frame':   169 obs. of  4 variables:
 $ Tarih     : Date, format: "2010-01-01" "2010-02-01" "2010-03-01" "2010-04-01" ...
 $ KrediFaizi: num  13.2 13.3 12.7 12 11.7 ...
 $ ArabaFiyat: num  115 115 116 116 116 ...
 $ UretimAdet: num  46810 46365 55755 51459 57433 ...
summary_data=skim(arabafiyat)
print(arabafiyat)
arabafiyat2 <- arabafiyat[, -which(names(arabafiyat) == "Tarih")]

# Check the structure of the new data frame
str(arabafiyat2)
'data.frame':   169 obs. of  3 variables:
 $ KrediFaizi: num  13.2 13.3 12.7 12 11.7 ...
 $ ArabaFiyat: num  115 115 116 116 116 ...
 $ UretimAdet: num  46810 46365 55755 51459 57433 ...

correl_info=cor(arabafiyat2)

ggcorrplot(correl_info, 
           hc.order = TRUE, 
           type = "lower",
           lab = TRUE)

ggplot(arabafiyat2, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()

ggpairs(arabafiyat2)

l_fit = lm(ArabaFiyat~.,data=arabafiyat2)
l_fit

Call:
lm(formula = ArabaFiyat ~ ., data = arabafiyat2)

Coefficients:
(Intercept)   KrediFaizi   UretimAdet  
 -3.533e+02    4.494e+01   -9.686e-04  
summary(l_fit)

Call:
lm(formula = ArabaFiyat ~ ., data = arabafiyat2)

Residuals:
    Min      1Q  Median      3Q     Max 
-669.14  -70.62   -2.37   74.20  605.43 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -3.533e+02  6.029e+01  -5.859 2.43e-08 ***
KrediFaizi   4.494e+01  2.163e+00  20.776  < 2e-16 ***
UretimAdet  -9.686e-04  8.448e-04  -1.147    0.253    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 202.9 on 166 degrees of freedom
Multiple R-squared:  0.7371,    Adjusted R-squared:  0.7339 
F-statistic: 232.7 on 2 and 166 DF,  p-value: < 2.2e-16
plot(l_fit)

ggplot(arabafiyat2, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='lm')


ggplot(arabafiyat2, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='loess')

ggplot(arabafiyat2, aes(x=UretimAdet,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='lm')


ggplot(arabafiyat2, aes(x=UretimAdet,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='loess')

ggplot(arabafiyat, aes(x = Tarih, y = ArabaFiyat)) +
  geom_line(color = "blue") +
  labs(title = "Araba Satış Fiyatı", x = "Tarih", y = "Satış Fiyatı")


arabafiyat$ArabaFiyat <- log(arabafiyat$ArabaFiyat + 1)
summary(arabafiyat)
     Tarih              KrediFaizi       ArabaFiyat      UretimAdet    
 Min.   :2010-01-01   Min.   : 9.607   Min.   :4.735   Min.   :  9661  
 1st Qu.:2013-07-01   1st Qu.:12.818   1st Qu.:4.935   1st Qu.: 54046  
 Median :2017-01-01   Median :15.197   Median :5.368   Median : 66976  
 Mean   :2016-12-30   Mean   :17.908   Mean   :5.612   Mean   : 68207  
 3rd Qu.:2020-07-01   3rd Qu.:22.032   3rd Qu.:6.006   3rd Qu.: 85368  
 Max.   :2024-01-01   Max.   :46.520   Max.   :7.506   Max.   :109443  
l_fit_log <- lm(ArabaFiyat~., data=arabafiyat)


summary(l_fit_log)

Call:
lm(formula = ArabaFiyat ~ ., data = arabafiyat)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.49044 -0.09496 -0.00906  0.13274  0.39496 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.406e+00  2.159e-01  -6.513 8.51e-10 ***
Tarih        3.915e-04  1.544e-05  25.360  < 2e-16 ***
KrediFaizi   2.995e-02  2.832e-03  10.575  < 2e-16 ***
UretimAdet  -3.486e-06  7.994e-07  -4.360 2.28e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1804 on 165 degrees of freedom
Multiple R-squared:  0.9455,    Adjusted R-squared:  0.9445 
F-statistic: 954.7 on 3 and 165 DF,  p-value: < 2.2e-16
ggplot(arabafiyat, aes(x = Tarih, y = ArabaFiyat)) +
  geom_line(color = "blue") +
  labs(title = "Araba Satış Fiyatı Log Transformed", x = "Tarih", y = "Satış Fiyatı Log")

ggplot(arabafiyat, aes(x = Tarih, y = KrediFaizi)) +
  geom_line(color = "blue") +
  labs(title = "Araba Kredi Faizi", x = "Tarih", y = "KrediFaizi")


logtransformed = copy(arabafiyat)
logtransformed$KrediFaizi <- log(logtransformed$KrediFaizi + 1)
summary(logtransformed)
     Tarih              KrediFaizi      ArabaFiyat      UretimAdet    
 Min.   :2010-01-01   Min.   :2.362   Min.   :4.735   Min.   :  9661  
 1st Qu.:2013-07-01   1st Qu.:2.626   1st Qu.:4.935   1st Qu.: 54046  
 Median :2017-01-01   Median :2.785   Median :5.368   Median : 66976  
 Mean   :2016-12-30   Mean   :2.873   Mean   :5.612   Mean   : 68207  
 3rd Qu.:2020-07-01   3rd Qu.:3.137   3rd Qu.:6.006   3rd Qu.: 85368  
 Max.   :2024-01-01   Max.   :3.861   Max.   :7.506   Max.   :109443  
head(logtransformed)

l_fit_log <- lm(ArabaFiyat~., data=logtransformed)


summary(l_fit_log)

Call:
lm(formula = ArabaFiyat ~ ., data = logtransformed)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.4758 -0.1211 -0.0206  0.1330  0.4633 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.637e+00  1.825e-01 -14.452  < 2e-16 ***
Tarih        3.934e-04  1.870e-05  21.043  < 2e-16 ***
KrediFaizi   6.103e-01  7.624e-02   8.005 2.02e-13 ***
UretimAdet  -3.777e-06  8.779e-07  -4.302 2.89e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1983 on 165 degrees of freedom
Multiple R-squared:  0.9342,    Adjusted R-squared:  0.933 
F-statistic: 780.5 on 3 and 165 DF,  p-value: < 2.2e-16
ggplot(logtransformed, aes(x = Tarih, y = KrediFaizi)) +
  geom_line(color = "blue") +
  labs(title = "Kredi Faizi Log Transformed", x = "Tarih", y = "Satış Fiyatı")

"After applying the logarithmic transformation, there wasn't a significant change, so there's no need to take the logarithm of the credit interest rate data."
[1] "After applying the logarithmic transformation, there wasn't a significant change, so there's no need to take the logarithm of the credit interest rate data."
ggplot(arabafiyat, aes(x = Tarih, y = UretimAdet)) +
  geom_line(color = "blue") +
  labs(title = "Araba Uretim Adedi", x = "Tarih", y = "Uretim")

logtransformed$UretimAdet <- log(logtransformed$UretimAdet + 1)
summary(logtransformed)
     Tarih              KrediFaizi      ArabaFiyat      UretimAdet    
 Min.   :2010-01-01   Min.   :2.362   Min.   :4.735   Min.   : 9.176  
 1st Qu.:2013-07-01   1st Qu.:2.626   1st Qu.:4.935   1st Qu.:10.898  
 Median :2017-01-01   Median :2.785   Median :5.368   Median :11.112  
 Mean   :2016-12-30   Mean   :2.873   Mean   :5.612   Mean   :11.082  
 3rd Qu.:2020-07-01   3rd Qu.:3.137   3rd Qu.:6.006   3rd Qu.:11.355  
 Max.   :2024-01-01   Max.   :3.861   Max.   :7.506   Max.   :11.603  
head(logtransformed)


l_fit_log <- lm(ArabaFiyat~., data=logtransformed)


summary(l_fit_log)

Call:
lm(formula = ArabaFiyat ~ ., data = logtransformed)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.47056 -0.11835 -0.02039  0.14232  0.47624 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -9.182e-01  5.179e-01  -1.773  0.07810 .  
Tarih        3.839e-04  1.876e-05  20.463  < 2e-16 ***
KrediFaizi   6.200e-01  7.791e-02   7.959 2.65e-13 ***
UretimAdet  -1.662e-01  5.065e-02  -3.281  0.00126 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2026 on 165 degrees of freedom
Multiple R-squared:  0.9313,    Adjusted R-squared:   0.93 
F-statistic: 745.3 on 3 and 165 DF,  p-value: < 2.2e-16
ggplot(logtransformed, aes(x = Tarih, y = UretimAdet)) +
  geom_line(color = "blue") +
  labs(title = "Araba Uretim Adedi Log Transformed", x = "Tarih", y = "Satış Fiyatı")

library(dplyr)

logtransformed <- logtransformed %>% mutate(trnd = row_number())

summary(logtransformed)
     Tarih              KrediFaizi      ArabaFiyat      UretimAdet          trnd    
 Min.   :2010-01-01   Min.   :2.362   Min.   :4.735   Min.   : 9.176   Min.   :  1  
 1st Qu.:2013-07-01   1st Qu.:2.626   1st Qu.:4.935   1st Qu.:10.898   1st Qu.: 43  
 Median :2017-01-01   Median :2.785   Median :5.368   Median :11.112   Median : 85  
 Mean   :2016-12-30   Mean   :2.873   Mean   :5.612   Mean   :11.082   Mean   : 85  
 3rd Qu.:2020-07-01   3rd Qu.:3.137   3rd Qu.:6.006   3rd Qu.:11.355   3rd Qu.:127  
 Max.   :2024-01-01   Max.   :3.861   Max.   :7.506   Max.   :11.603   Max.   :169  
l_trend <- lm(ArabaFiyat~ KrediFaizi + UretimAdet + trnd ,data=logtransformed)
summary(l_trend)

Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = logtransformed)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.47025 -0.11820 -0.02045  0.14210  0.47620 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  4.6795951  0.5773079   8.106 1.12e-13 ***
KrediFaizi   0.6198389  0.0779037   7.956 2.69e-13 ***
UretimAdet  -0.1661928  0.0506488  -3.281  0.00126 ** 
trnd         0.0116872  0.0005711  20.466  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2026 on 165 degrees of freedom
Multiple R-squared:  0.9313,    Adjusted R-squared:   0.93 
F-statistic: 745.5 on 3 and 165 DF,  p-value: < 2.2e-16
checkresiduals(l_trend$residuals)

    Ljung-Box test

data:  Residuals
Q* = 895.98, df = 10, p-value < 2.2e-16

Model df: 0.   Total lags used: 10

library(tseries)
kpss_test_result <- adf.test(residuals(l_trend), alternative = "stationary")
kpss_test_result

    Augmented Dickey-Fuller Test

data:  residuals(l_trend)
Dickey-Fuller = -1.1829, Lag order = 5, p-value = 0.9066
alternative hypothesis: stationary
plot(residuals(l_trend))

acf(residuals(l_trend))

pacf(residuals(l_trend))

plot(l_trend)

logtransformed <- as.data.table(logtransformed)
head(logtransformed)
# Differencing the relevant variables
logtransformeddiff <- logtransformed[, lapply(.SD, diff), .SDcols = c("KrediFaizi", "ArabaFiyat", "UretimAdet")]
# Checking the first few rows of the differenced dataset
head(logtransformeddiff)
logtransformeddiff[, trnd := 1:.N]

# Model without trend and with differencing
l_fit_log_diff<- lm(ArabaFiyat ~ KrediFaizi + UretimAdet+trnd, data = logtransformeddiff)

# Summary of the model
summary(l_fit_log_diff)

Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = logtransformeddiff)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.146312 -0.012372 -0.002325  0.008871  0.289973 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.107e-03  5.197e-03  -0.213 0.831625    
KrediFaizi   2.093e-01  3.701e-02   5.655 6.79e-08 ***
UretimAdet   5.444e-03  6.973e-03   0.781 0.436095    
trnd         1.896e-04  5.359e-05   3.539 0.000524 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.0335 on 164 degrees of freedom
Multiple R-squared:  0.2319,    Adjusted R-squared:  0.2179 
F-statistic: 16.51 on 3 and 164 DF,  p-value: 2.017e-09
require(tseries)
adf.test(logtransformeddiff$ArabaFiyat)
Warning: p-value smaller than printed p-value

    Augmented Dickey-Fuller Test

data:  logtransformeddiff$ArabaFiyat
Dickey-Fuller = -5.9502, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
adf.test(l_fit_log_diff$residuals)
Warning: p-value smaller than printed p-value

    Augmented Dickey-Fuller Test

data:  l_fit_log_diff$residuals
Dickey-Fuller = -5.4057, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
"test results give both araba fiyat and residuals of the model are stationary"
[1] "test results give both araba fiyat and residuals of the model are stationary"
ggplot(logtransformeddiff, aes(x=UretimAdet,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='lm')


ggplot(logtransformeddiff, aes(x=UretimAdet,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='loess')

ggplot(logtransformeddiff, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='lm')


ggplot(logtransformeddiff, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='loess')

plot(l_fit_log_diff)

l_diff_log_withouttrend <- lm(ArabaFiyat ~ KrediFaizi + UretimAdet , data = logtransformeddiff)
summary(l_diff_log_withouttrend)

Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet, data = logtransformeddiff)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.141314 -0.013205 -0.005323  0.007244  0.299228 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.014822   0.002686   5.518 1.30e-07 ***
KrediFaizi  0.223191   0.038069   5.863 2.41e-08 ***
UretimAdet  0.005364   0.007213   0.744    0.458    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.03465 on 165 degrees of freedom
Multiple R-squared:  0.1733,    Adjusted R-squared:  0.1633 
F-statistic: 17.29 on 2 and 165 DF,  p-value: 1.517e-07
ggplot(logtransformeddiff, aes(x = trnd, y = ArabaFiyat)) +
  geom_line(color = "blue") +
  labs(x = "Tarih", y = "Satış Fiyatı")

transformed_diff=copy(logtransformeddiff[-c(114,143,106)])
ggplot(transformed_diff, aes(x = trnd, y = ArabaFiyat)) +
  geom_line(color = "blue") +
  labs(x = "Tarih", y = "Satış Fiyatı")

ggplot(logtransformeddiff, aes(x = KrediFaizi, y = ArabaFiyat)) +
  geom_line(color = "blue") +
  labs(x = "Kredi Faizi", y = "Satış Fiyatı")

ggplot(logtransformeddiff, aes(x = UretimAdet, y = ArabaFiyat)) +
  geom_line(color = "blue") +
  labs(x = "Uretim Adet", y = "Satış Fiyatı")

l_fit_log_diff<- lm(ArabaFiyat ~ KrediFaizi + UretimAdet+trnd, data = transformed_diff)
plot(l_fit_log_diff)

summary(l_fit_log_diff)

Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = transformed_diff)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.048809 -0.011016 -0.002450  0.008614  0.093178 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 7.904e-04  3.194e-03   0.247    0.805    
KrediFaizi  1.566e-01  2.306e-02   6.788 2.07e-10 ***
UretimAdet  3.158e-03  4.286e-03   0.737    0.462    
trnd        1.549e-04  3.309e-05   4.680 6.06e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.02057 on 161 degrees of freedom
Multiple R-squared:  0.3183,    Adjusted R-squared:  0.3055 
F-statistic: 25.05 on 3 and 161 DF,  p-value: 2.35e-13
weights <- 1 / abs(l_fit_log_diff$residuals)
l_fit_log_diff_wls <- lm(ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = transformed_diff, weights = weights)
summary(l_fit_log_diff_wls)

Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = transformed_diff, 
    weights = weights)

Weighted Residuals:
     Min       1Q   Median       3Q      Max 
-0.21737 -0.10038 -0.04458  0.09490  0.30968 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 6.910e-04  1.244e-03   0.556    0.579    
KrediFaizi  1.541e-01  1.305e-02  11.806   <2e-16 ***
UretimAdet  3.047e-03  2.043e-03   1.491    0.138    
trnd        1.500e-04  1.538e-05   9.755   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.12 on 161 degrees of freedom
Multiple R-squared:  0.6254,    Adjusted R-squared:  0.6184 
F-statistic: 89.61 on 3 and 161 DF,  p-value: < 2.2e-16
plot(residuals(l_fit_log_diff))

acf(residuals(l_fit_log_diff))

pacf(residuals(l_fit_log_diff))

tmp=copy(transformed_diff)
tmp[,actual:=ArabaFiyat]
tmp[,predicted_trend:=predict(l_fit_log_diff_wls,tmp)]
tmp[,residual_trend:=actual-predicted_trend]
#head(tmp)
ggplot(tmp ,aes(x=trnd)) +
        geom_line(aes(y=actual,color='real')) + 
        geom_line(aes(y=predicted_trend,color='predicted'))

data_path="/Users/ahmetceliker/Desktop/IE 360 HW1/m1paraarzıı.xlsx"

data=read.xlsx(data_path)

str(data)
'data.frame':   419 obs. of  4 variables:
 $ Tarih            : chr  "01-01-2016" "08-01-2016" "15-01-2016" "22-01-2016" ...
 $ ParaArzı         : num  3.12e+08 3.03e+08 3.11e+08 3.09e+08 3.08e+08 ...
 $ KrediKartıHarcama: num  11565090 9940209 10219710 10269749 11019633 ...
 $ ElektrikTüketim  : num  648689 759394 755906 778675 799747 ...
convert_to_ymd <- function(date_string) {
  
  formatted_date <- as.Date(date_string, format = "%d-%m-%Y")
  
  return(formatted_date)
}


data$Tarih <- convert_to_ymd(data$Tarih) 

head(data)
str(data)
'data.frame':   419 obs. of  4 variables:
 $ Tarih            : Date, format: "2016-01-01" "2016-01-08" "2016-01-15" "2016-01-22" ...
 $ ParaArzı         : num  3.12e+08 3.03e+08 3.11e+08 3.09e+08 3.08e+08 ...
 $ KrediKartıHarcama: num  11565090 9940209 10219710 10269749 11019633 ...
 $ ElektrikTüketim  : num  648689 759394 755906 778675 799747 ...
ggplot(data, aes(x = Tarih, y = KrediKartıHarcama)) +
  geom_line(color = "blue")

ggplot(data, aes(x = Tarih, y = ParaArzı)) +
  geom_line(color = "blue")

ggplot(data, aes(x = Tarih, y = ElektrikTüketim)) +
  geom_line(color = "blue")

data2 <- subset(data, select = -Tarih)

correl_info=cor(data2)

ggcorrplot(correl_info, 
           hc.order = TRUE, 
           type = "lower",
           lab = TRUE)

ggpairs(data)

l_fit = lm(KrediKartıHarcama~.,data=data)
summary(l_fit)

Call:
lm(formula = KrediKartıHarcama ~ ., data = data)

Residuals:
      Min        1Q    Median        3Q       Max 
-34794933  -6164161     81229   7149190  70648213 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      3.811e+08  2.254e+07  16.912   <2e-16 ***
Tarih           -2.297e+04  1.367e+03 -16.809   <2e-16 ***
ParaArzı         5.070e-02  8.718e-04  58.161   <2e-16 ***
ElektrikTüketim  1.334e+01  7.209e+00   1.851   0.0649 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 10410000 on 415 degrees of freedom
Multiple R-squared:  0.9546,    Adjusted R-squared:  0.9543 
F-statistic:  2911 on 3 and 415 DF,  p-value: < 2.2e-16
ggplot(data, aes(x=KrediKartıHarcama,y=ParaArzı)) + geom_point()+geom_smooth(method='lm')

ggplot(data, aes(x=KrediKartıHarcama,y=ElektrikTüketim)) + geom_point()+geom_smooth(method='lm')

plot(l_fit)

checkresiduals(l_fit)

    Breusch-Godfrey test for serial correlation of order up to 10

data:  Residuals
LM test = 333.21, df = 10, p-value < 2.2e-16

data <- as.data.table(data)
data[, trnd := 1:.N]
data[,ay:=as.character(month(Tarih,label=T))]
data[, yil := as.character(format(Tarih, "%Y"))]
data[, log_ParaArzı := log(ParaArzı)]
data[, log_KrediKartıHarcama := log(KrediKartıHarcama)]
head(data)


l_fit_log <- lm(log_KrediKartıHarcama ~ log_ParaArzı + ElektrikTüketim , data=data)


summary(l_fit_log)

Call:
lm(formula = log_KrediKartıHarcama ~ log_ParaArzı + ElektrikTüketim, 
    data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.74307 -0.15833  0.06416  0.14106  0.68868 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)     -2.583e+00  2.974e-01  -8.687   <2e-16 ***
log_ParaArzı     9.430e-01  1.669e-02  56.515   <2e-16 ***
ElektrikTüketim  2.543e-07  1.689e-07   1.505    0.133    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2486 on 416 degrees of freedom
Multiple R-squared:  0.9153,    Adjusted R-squared:  0.9149 
F-statistic:  2247 on 2 and 416 DF,  p-value: < 2.2e-16
ggplot(data, aes(x=log_ParaArzı,y=log_KrediKartıHarcama)) + 
geom_point() + 
geom_smooth(method='lm')



plot(l_fit_log)

NA

checkresiduals(l_fit_log)

    Breusch-Godfrey test for serial correlation of order up to 10

data:  Residuals
LM test = 363.94, df = 10, p-value < 2.2e-16

data$Trend_3_Aylik <- rollmean(data$KrediKartıHarcama, 3, fill = NA)
data$Trend_6_Aylik <- rollmean(data$KrediKartıHarcama, 6, fill = NA)

l_fit_trend <- lm(log_KrediKartıHarcama ~ ElektrikTüketim+log_ParaArzı+ Trend_3_Aylik + Trend_6_Aylik, data=data)


summary(l_fit_trend)

Call:
lm(formula = log_KrediKartıHarcama ~ ElektrikTüketim + log_ParaArzı + 
    Trend_3_Aylik + Trend_6_Aylik, data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.43163 -0.06424  0.01930  0.08083  0.27118 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      5.328e+00  2.682e-01  19.863  < 2e-16 ***
ElektrikTüketim  5.565e-07  8.526e-08   6.527 1.99e-10 ***
log_ParaArzı     5.308e-01  1.432e-02  37.064  < 2e-16 ***
Trend_3_Aylik    1.295e-08  3.572e-09   3.626 0.000324 ***
Trend_6_Aylik   -4.497e-09  3.542e-09  -1.270 0.204870    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1229 on 409 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.9786,    Adjusted R-squared:  0.9784 
F-statistic:  4670 on 4 and 409 DF,  p-value: < 2.2e-16
checkresiduals(l_fit_trend)

    Breusch-Godfrey test for serial correlation of order up to 10

data:  Residuals
LM test = 246.77, df = 10, p-value < 2.2e-16

ggplot(data, aes(x=Tarih , y = log_KrediKartıHarcama)) +
  geom_line(color = "blue")

ggplot(data, aes(x=Tarih , y = log_ParaArzı)) +
  geom_line(color = "blue")

l_fit_trend_cathegorical <- lm(log_KrediKartıHarcama ~ ElektrikTüketim+log_ParaArzı+ Trend_3_Aylik + Trend_6_Aylik+ay+yil, data=data)
summary(l_fit_trend_cathegorical)

Call:
lm(formula = log_KrediKartıHarcama ~ ElektrikTüketim + log_ParaArzı + 
    Trend_3_Aylik + Trend_6_Aylik + ay + yil, data = data)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.312210 -0.042478  0.005646  0.055580  0.273512 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      9.799e+00  1.402e+00   6.990 1.19e-11 ***
ElektrikTüketim  9.624e-07  1.026e-07   9.380  < 2e-16 ***
log_ParaArzı     2.888e-01  7.149e-02   4.040 6.44e-05 ***
Trend_3_Aylik    1.109e-08  2.644e-09   4.195 3.38e-05 ***
Trend_6_Aylik   -5.027e-09  2.633e-09  -1.909 0.056993 .  
ayAug           -6.738e-02  2.984e-02  -2.258 0.024490 *  
ayDec            4.859e-02  2.805e-02   1.732 0.084083 .  
ayFeb           -5.095e-02  2.351e-02  -2.167 0.030809 *  
ayJan           -1.122e-01  2.391e-02  -4.695 3.70e-06 ***
ayJul           -3.376e-02  2.684e-02  -1.258 0.209142    
ayJun            5.069e-02  2.226e-02   2.277 0.023334 *  
ayMar            1.420e-03  2.168e-02   0.066 0.947808    
ayMay            2.919e-02  2.167e-02   1.347 0.178677    
ayNov            8.862e-02  2.535e-02   3.495 0.000528 ***
ayOct            9.026e-02  2.460e-02   3.669 0.000278 ***
aySep            1.744e-02  2.567e-02   0.679 0.497252    
yil2017          2.652e-02  2.373e-02   1.118 0.264446    
yil2018          1.115e-01  3.361e-02   3.317 0.000995 ***
yil2019          1.626e-01  4.548e-02   3.575 0.000394 ***
yil2020          1.011e-01  8.294e-02   1.219 0.223579    
yil2021          3.117e-01  1.042e-01   2.991 0.002956 ** 
yil2022          6.817e-01  1.436e-01   4.746 2.91e-06 ***
yil2023          8.533e-01  1.720e-01   4.962 1.04e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.08891 on 391 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.9893,    Adjusted R-squared:  0.9887 
F-statistic:  1641 on 22 and 391 DF,  p-value: < 2.2e-16
checkresiduals(l_fit_trend_cathegorical)

    Breusch-Godfrey test for serial correlation of order up to 26

data:  Residuals
LM test = 142.65, df = 26, p-value < 2.2e-16


data$KrediKartıHarcama_4_Aylik_Gecikmeli <- lag(data$KrediKartıHarcama, 4)
data$KrediKartıHarcama_6_Aylik_Gecikmeli <- lag(data$KrediKartıHarcama, 6)
head(data)
l_fit_gecikmeli <- lm(log_KrediKartıHarcama ~ ElektrikTüketim + log_ParaArzı + KrediKartıHarcama_6_Aylik_Gecikmeli+Trend_3_Aylik +ay+yil, data=data)


summary(l_fit_gecikmeli)

Call:
lm(formula = log_KrediKartıHarcama ~ ElektrikTüketim + log_ParaArzı + 
    KrediKartıHarcama_6_Aylik_Gecikmeli + Trend_3_Aylik + ay + 
    yil, data = data)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.310788 -0.041623  0.003025  0.056779  0.278610 

Coefficients:
                                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)                          9.854e+00  1.425e+00   6.916 1.92e-11 ***
ElektrikTüketim                      9.693e-07  1.020e-07   9.503  < 2e-16 ***
log_ParaArzı                         2.858e-01  7.267e-02   3.933 9.92e-05 ***
KrediKartıHarcama_6_Aylik_Gecikmeli -2.215e-09  9.807e-10  -2.258 0.024477 *  
Trend_3_Aylik                        7.968e-09  9.763e-10   8.162 4.63e-15 ***
ayAug                               -6.799e-02  2.994e-02  -2.271 0.023719 *  
ayDec                                4.432e-02  2.815e-02   1.574 0.116219    
ayFeb                               -5.322e-02  2.385e-02  -2.232 0.026207 *  
ayJan                               -1.122e-01  2.497e-02  -4.492 9.33e-06 ***
ayJul                               -3.575e-02  2.690e-02  -1.329 0.184662    
ayJun                                4.642e-02  2.247e-02   2.066 0.039475 *  
ayMar                               -1.733e-03  2.185e-02  -0.079 0.936810    
ayMay                                2.695e-02  2.179e-02   1.236 0.217026    
ayNov                                9.404e-02  2.565e-02   3.666 0.000280 ***
ayOct                                9.805e-02  2.502e-02   3.919 0.000105 ***
aySep                                2.443e-02  2.607e-02   0.937 0.349197    
yil2017                              2.911e-02  2.474e-02   1.177 0.240051    
yil2018                              1.154e-01  3.490e-02   3.306 0.001036 ** 
yil2019                              1.673e-01  4.702e-02   3.558 0.000420 ***
yil2020                              1.080e-01  8.517e-02   1.268 0.205431    
yil2021                              3.180e-01  1.069e-01   2.974 0.003119 ** 
yil2022                              6.908e-01  1.473e-01   4.690 3.78e-06 ***
yil2023                              8.675e-01  1.764e-01   4.918 1.29e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.08939 on 389 degrees of freedom
  (7 observations deleted due to missingness)
Multiple R-squared:  0.9894,    Adjusted R-squared:  0.9888 
F-statistic:  1655 on 22 and 389 DF,  p-value: < 2.2e-16
checkresiduals(l_fit_gecikmeli)

    Breusch-Godfrey test for serial correlation of order up to 26

data:  Residuals
LM test = 142.45, df = 26, p-value < 2.2e-16

l_fit_gecikmeli <- lm(log_KrediKartıHarcama ~ log(ElektrikTüketim) + log_ParaArzı + KrediKartıHarcama_6_Aylik_Gecikmeli + Trend_3_Aylik + ay + yil, data=data)
summary(l_fit_gecikmeli)

Call:
lm(formula = log_KrediKartıHarcama ~ log(ElektrikTüketim) + 
    log_ParaArzı + KrediKartıHarcama_6_Aylik_Gecikmeli + Trend_3_Aylik + 
    ay + yil, data = data)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.307028 -0.041555  0.001714  0.053973  0.279008 

Coefficients:
                                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)                         -1.015e+00  1.827e+00  -0.556 0.578819    
log(ElektrikTüketim)                 8.483e-01  8.205e-02  10.338  < 2e-16 ***
log_ParaArzı                         2.923e-01  7.147e-02   4.090 5.24e-05 ***
KrediKartıHarcama_6_Aylik_Gecikmeli -2.189e-09  9.635e-10  -2.272 0.023634 *  
Trend_3_Aylik                        7.989e-09  9.583e-10   8.337 1.33e-15 ***
ayAug                               -7.113e-02  2.895e-02  -2.457 0.014433 *  
ayDec                                3.436e-02  2.781e-02   1.236 0.217343    
ayFeb                               -5.841e-02  2.348e-02  -2.488 0.013263 *  
ayJan                               -1.175e-01  2.458e-02  -4.782 2.47e-06 ***
ayJul                               -4.082e-02  2.622e-02  -1.557 0.120256    
ayJun                                4.298e-02  2.211e-02   1.944 0.052597 .  
ayMar                               -5.162e-03  2.150e-02  -0.240 0.810365    
ayMay                                2.860e-02  2.143e-02   1.335 0.182814    
ayNov                                8.765e-02  2.527e-02   3.468 0.000583 ***
ayOct                                9.335e-02  2.462e-02   3.791 0.000174 ***
aySep                                1.909e-02  2.560e-02   0.746 0.456169    
yil2017                              2.102e-02  2.442e-02   0.861 0.389999    
yil2018                              1.041e-01  3.445e-02   3.022 0.002679 ** 
yil2019                              1.544e-01  4.636e-02   3.331 0.000948 ***
yil2020                              9.420e-02  8.382e-02   1.124 0.261756    
yil2021                              2.982e-01  1.052e-01   2.834 0.004840 ** 
yil2022                              6.655e-01  1.450e-01   4.590 5.98e-06 ***
yil2023                              8.367e-01  1.736e-01   4.820 2.06e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.08788 on 389 degrees of freedom
  (7 observations deleted due to missingness)
Multiple R-squared:  0.9898,    Adjusted R-squared:  0.9892 
F-statistic:  1713 on 22 and 389 DF,  p-value: < 2.2e-16
checkresiduals(l_fit_gecikmeli)

    Breusch-Godfrey test for serial correlation of order up to 26

data:  Residuals
LM test = 142.99, df = 26, p-value < 2.2e-16

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CnJlcXVpcmUob3Blbnhsc3gpCnJlcXVpcmUoZ2dwbG90MikKcmVxdWlyZShkYXRhLnRhYmxlKQpyZXF1aXJlKHNraW1yKQpyZXF1aXJlKEdHYWxseSkKcmVxdWlyZShnZ2NvcnJwbG90KQpyZXF1aXJlKGZvcmVjYXN0KQpyZXF1aXJlKGx1YnJpZGF0ZSkKcmVxdWlyZShyZXByKQpyZXF1aXJlKGxtdGVzdCkKb3B0aW9ucyhyZXByLnBsb3Qud2lkdGg9MTIuNywgcmVwci5wbG90LmhlaWdodD04LjUpCmRhdGFfcGF0aCA9ICcvVXNlcnMvYWhtZXRjZWxpa2VyL0Rlc2t0b3AvSUUgMzYwIEhXMS90b3BsYW1rcmVkaWhhY21pLnhsc3gnCmtyZWRpPXJlYWQueGxzeChkYXRhX3BhdGgsc2hlZXQ9J2RhdGEnKQpzdHIoa3JlZGkpCgpgYGAKCgpgYGB7cn0Kc3VtbWFyeV9kYXRhPXNraW0oa3JlZGkpCnByaW50KHN1bW1hcnlfZGF0YSkKYGBgCgoKCmBgYHtyfQprcmVkaT1kYXRhLnRhYmxlKGtyZWRpKQpzdHIoa3JlZGkpCgpjb3JyZWxfaW5mbz1jb3Ioa3JlZGkpCgpnZ2NvcnJwbG90KGNvcnJlbF9pbmZvLCAKICAgICAgICAgICBoYy5vcmRlciA9IFRSVUUsIAogICAgICAgICAgIHR5cGUgPSAibG93ZXIiLAogICAgICAgICAgIGxhYiA9IFRSVUUpCmBgYApgYGB7cn0KZ2dwbG90KGtyZWRpLCBhZXMoeD1NZXZkdWF0RmFpek9yYW5pLHk9S3JlZGlIYWNtaSkpICsgZ2VvbV9wb2ludCgpCmBgYAoKCmBgYHtyfQpsX2ZpdCA9IGxtKEtyZWRpSGFjbWl+LixkYXRhPWtyZWRpKQpsX2ZpdApgYGAKCgpgYGB7cn0Kc3VtbWFyeShsX2ZpdCkKYGBgCgpgYGB7cn0KcGxvdChsX2ZpdCkKCmBgYAoKYGBge3J9CmdncGxvdChrcmVkaSwgYWVzKHg9TWV2ZHVhdEZhaXpPcmFuaSx5PUtyZWRpSGFjbWkpKSArIGdlb21fcG9pbnQoKSArZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScpCmBgYApgYGB7cn0KZ2dwbG90KGtyZWRpLCBhZXMoeD1NZXZkdWF0RmFpek9yYW5pLHk9S3JlZGlIYWNtaSkpICsgZ2VvbV9wb2ludCgpK2dlb21fc21vb3RoKG1ldGhvZD0nbG9lc3MnKQpgYGAKCgpgYGB7cn0Kc3VtbWFyeShsX2ZpdCkKYGBgCgpgYGB7cn0Ka3JlZGlbLCB0cm5kIDo9IDE6Lk5dCmhlYWQoa3JlZGkpCmBgYAoKYGBge3J9CmxtX3RyZW5kPWxtKEtyZWRpSGFjbWl+dHJuZCxrcmVkaSkKc3VtbWFyeShsbV90cmVuZCkKYGBgCgpgYGB7cn0KIyBOZXcgTW9kZWwgd2l0aCBUcmVuZApsX2ZpdF90cmVuZCA8LSBsbShLcmVkaUhhY21pIH4gTWV2ZHVhdEZhaXpPcmFuaSArIHRybmQsIGRhdGEgPSBrcmVkaSkKCiMgU3VtbWFyeSBvZiBOZXcgTW9kZWwgd2l0aCBUcmVuZApzdW1tYXJ5KGxfZml0X3RyZW5kKQpgYGAKYGBge3J9CmJwdGVzdChsX2ZpdF90cmVuZCkKZ2dwbG90KGtyZWRpLCBhZXMoeCA9IE1ldmR1YXRGYWl6T3JhbmksIHkgPSBLcmVkaUhhY21pKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9zbW9vdGgoCiAgICBhZXMoeSA9IHByZWRpY3QobF9maXRfdHJlbmQsIG5ld2RhdGEgPSBkYXRhLmZyYW1lKE1ldmR1YXRGYWl6T3JhbmkgPSBrcmVkaSRNZXZkdWF0RmFpek9yYW5pLCB0cm5kID0ga3JlZGkkdHJuZCkpKSwKICAgIG1ldGhvZCA9ICdsbScsCiAgICBjb2xvciA9ICdibHVlJywKICAgIGxpbmV0eXBlID0gJ3NvbGlkJwogICkKYGBgCgpgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXRfdHJlbmQkcmVzaWR1YWxzKQpgYGAKYGBge3J9CnJlcXVpcmUodHNlcmllcykKYWRmLnRlc3Qoa3JlZGkkS3JlZGlIYWNtaSkKYWRmLnRlc3QobF9maXRfdHJlbmQkcmVzaWR1YWxzKQoKYGBgCgoKCmBgYHtyfQpzdW1tYXJ5KGtyZWRpKQpzdHIoa3JlZGkpCmBgYAoKCgpgYGB7cn0KIyBEaWZmZXJlbmNpbmcgdGhlIHJlbGV2YW50IHZhcmlhYmxlcwprcmVkaV9kaWZmIDwtIGtyZWRpWywgbGFwcGx5KC5TRCwgZGlmZiksIC5TRGNvbHMgPSBjKCJLcmVkaUhhY21pIiwgIk1ldmR1YXRGYWl6T3JhbmkiKV0KIyBDaGVja2luZyB0aGUgZmlyc3QgZmV3IHJvd3Mgb2YgdGhlIGRpZmZlcmVuY2VkIGRhdGFzZXQKaGVhZChrcmVkaV9kaWZmKQoKIyBNb2RlbCB3aXRob3V0IHRyZW5kIGFuZCB3aXRoIGRpZmZlcmVuY2luZwpsX2ZpdF9kaWZmX3NpbXBsZSA8LSBsbShLcmVkaUhhY21pIH4gTWV2ZHVhdEZhaXpPcmFuaSwgZGF0YSA9IGtyZWRpX2RpZmYpCgojIFN1bW1hcnkgb2YgdGhlIG1vZGVsCnN1bW1hcnkobF9maXRfZGlmZl9zaW1wbGUpCmBgYAoKYGBge3J9CmdncGxvdChrcmVkaV9kaWZmLCBhZXMoeD1NZXZkdWF0RmFpek9yYW5pLHk9S3JlZGlIYWNtaSkpICsgZ2VvbV9wb2ludCgpICtnZW9tX3Ntb290aChtZXRob2Q9J2xtJykKCmBgYAoKCgpgYGB7cn0KIyBBcHBseWluZyBsb2cgdHJhbnNmb3JtYXRpb24gdG8gS3JlZGlIYWNtaSB2YXJpYWJsZQprcmVkaSRLcmVkaUhhY21pIDwtIGxvZyhrcmVkaSRLcmVkaUhhY21pICsgMSkgICMgQWRkaW5nIDEgdG8gYXZvaWQgbG9nKDApIGVycm9ycwoKIyBGaXQgYSBuZXcgbW9kZWwgd2l0aCB0aGUgbG9nLXRyYW5zZm9ybWVkIEtyZWRpSGFjbWkgdmFyaWFibGUKbF9maXRfbG9nIDwtIGxtKEtyZWRpSGFjbWkgfiBNZXZkdWF0RmFpek9yYW5pICsgdHJuZCwgZGF0YSA9IGtyZWRpKQoKIyBTdW1tYXJ5IG9mIHRoZSBuZXcgbW9kZWwgd2l0aCB0aGUgbG9nLXRyYW5zZm9ybWVkIEtyZWRpSGFjbWkgdmFyaWFibGUKc3VtbWFyeShsX2ZpdF9sb2cpCgoKYGBgCmBgYHtyfQpjaGVja3Jlc2lkdWFscyhsX2ZpdF9sb2cpCmFkZi50ZXN0KGtyZWRpJEtyZWRpSGFjbWkpCmFkZi50ZXN0KGxfZml0X2xvZyRyZXNpZHVhbHMpCmBgYAoKCgpgYGB7cn0KZ2dwbG90KGtyZWRpX2RpZmYsIGFlcyh4PU1ldmR1YXRGYWl6T3JhbmkseT1LcmVkaUhhY21pKSkgKyBnZW9tX3BvaW50KCkgK2dlb21fc21vb3RoKG1ldGhvZD0nbG0nKQpgYGAKCmBgYHtyfQp3ZWlnaHRzIDwtIDEgLyBhYnMobF9maXRfbG9nJHJlc2lkdWFscykKbF9maXRfd2xzIDwtIGxtKEtyZWRpSGFjbWkgfiBNZXZkdWF0RmFpek9yYW5pICsgdHJuZCwgZGF0YSA9IGtyZWRpLCB3ZWlnaHRzID0gd2VpZ2h0cykKc3VtbWFyeShsX2ZpdF93bHMpCmNoZWNrcmVzaWR1YWxzKGxfZml0X3dscykKa3JlZGkkd2Vla19udW1iZXIgPC0gc2VxKDEsIG5yb3coa3JlZGkpKQpoZWFkKGtyZWRpLDUwKQpgYGAKCgoKYGBge3J9CnBsb3QobG9nMTAoYWJzKGZmdF9rcmVkaSkpLCBtYWluID0gIktyZWRpIEhhY21pIERGVCAoTG9nYXJpdG1paykiLCB4bGFiID0gIkZyZWthbnMiLCB5bGFiID0gIkdlbmxpayIpCgoKYGBgCgoKYGBge3J9CnBsb3QobF9maXRfd2xzKQpgYGAKCgoKYGBge3J9CmFjZihsX2ZpdF93bHMkcmVzaWR1YWxzLDIwMCkKbWVhbihsX2ZpdF93bHMkcmVzaWR1YWxzKQpjb3IobF9maXRfd2xzJHJlc2lkdWFscywga3JlZGkkTWV2ZHVhdEZhaXpPcmFuaSkKY29yKGxfZml0X3dscyRyZXNpZHVhbHMsIGtyZWRpJHRybmQpCmBgYAoKYGBge3J9CiN0byBmaW5kIHNlYXNvbmFsaXR5IGluZGV4CmdncGxvdChrcmVkaVt3ZWVrX251bWJlcj4xICYgd2Vla19udW1iZXI8MzAwXSAsYWVzKHg9d2Vla19udW1iZXIpKSArCiAgICAgICAgZ2VvbV9saW5lKGFlcyh5PUtyZWRpSGFjbWksY29sb3I9J3JlYWwnKSkKYGBgCgoKYGBge3J9CgpkYXRhX3RvX3Bsb3QgPC0ga3JlZGkKeV9sYWJlbCA8LSAiS3JlZGkgSGFjbWkiCmdncGxvdChkYXRhX3RvX3Bsb3QsIGFlcyh4ID0gdHJuZCwgeSA9IEtyZWRpSGFjbWkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAgIyBBZGp1c3QgcG9pbnQgc2l6ZSBhcyBkZXNpcmVkCiAgbGFicyh0aXRsZSA9ICJUcmVuZCB2cy4gS3JlZGkgSGFjbWkiLAogICAgICAgeCA9ICJUcmVuZCIsCiAgICAgICB5ID0geV9sYWJlbCkKICAKYGBgCgpgYGB7cn0KI21vbnRobHkgc2Vhc29uYWxpdHkgd2l0aCBsYWcgb2YgMjApIGZvdXJpZXIgc2VyaXMKCmtyZWRpJHNlYXNvbmFsaXR5X3NpbiA8LSBzaW4oMipwaSAqICgoa3JlZGkkd2Vla19udW1iZXIgLSAxKSAlJSAyMCkgLyAyMCkgICMgSGVyIDIwIGhhZnRhZGEgYmlyIHNpbsO8cyBtZXZzaW1zZWxsaWsKa3JlZGkkc2Vhc29uYWxpdHlfY29zIDwtIGNvcygyKnBpICogKChrcmVkaSR3ZWVrX251bWJlciAtIDEpICUlIDIwKSAvIDIwKSAgIyBIZXIgMjAgaGFmdGFkYSBiaXIga29zaW7DvHMgbWV2c2ltc2VsbGlrCgpsX2ZpdF93bHNfZm91cmllciA8LSBsbShLcmVkaUhhY21pIH4gTWV2ZHVhdEZhaXpPcmFuaSArIHRybmQgKyBzZWFzb25hbGl0eV9zaW4gKyBzZWFzb25hbGl0eV9jb3MsIGRhdGEgPSBrcmVkaSwgd2VpZ2h0cyA9IHdlaWdodHMpCnN1bW1hcnkobF9maXRfd2xzX2ZvdXJpZXIpCmNoZWNrcmVzaWR1YWxzKGxfZml0X3dsc19mb3VyaWVyKQpnZ3Bsb3Qoa3JlZGksIGFlcyh4ID0gTWV2ZHVhdEZhaXpPcmFuaSwgeSA9IEtyZWRpSGFjbWkpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKyAgIyBBZGp1c3QgYWxwaGEgZm9yIHBvaW50IHRyYW5zcGFyZW5jeQogIGdlb21fc21vb3RoKAogICAgbWV0aG9kID0gJ2xtJywKICAgIGFlcyh5ID0gcHJlZGljdChsX2ZpdF93bHNfZm91cmllciwgbmV3ZGF0YSA9IGRhdGEuZnJhbWUoTWV2ZHVhdEZhaXpPcmFuaSA9IGtyZWRpJE1ldmR1YXRGYWl6T3JhbmksIHRybmQgPSBrcmVkaSR0cm5kLCBzZWFzb25hbGl0eV9zaW4gPSBrcmVkaSRzZWFzb25hbGl0eV9zaW4sIHNlYXNvbmFsaXR5X2NvcyA9IGtyZWRpJHNlYXNvbmFsaXR5X2NvcykpKSwKICAgIGNvbG9yID0gJ2JsdWUnLAogICAgbGluZXR5cGUgPSAnc29saWQnCiAgKSArCiAgbGFicyh0aXRsZSA9ICJGaXR0ZWQgTW9kZWwgd2l0aCBXTFMsIFRyZW5kLCBhbmQgRm91cmllciBGZWF0dXJlcyIsCiAgICAgICB4ID0gIk1ldmR1YXRGYWl6T3JhbmkiLAogICAgICAgeSA9ICJLcmVkaSBIYWNtaSIpCgpgYGAKYGBge3J9CiNDaGVja2luZyBhbGwgYXNzdW1waXRvbnMgb2YgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWw6CiMgQ2hlY2sgaWYgbWVhbiBvZiByZXNpZHVhbHMgaXMgY2xvc2UgdG8gemVybwptZWFuKHJlc2lkdWFscyhsX2ZpdF93bHNfZm91cmllcikpCiNDaGVjayBmb3IgYXV0b2NvcnJlbGF0aW9uIGluIHJlc2lkdWFscwphY2YocmVzaWR1YWxzKGxfZml0X3dsc19mb3VyaWVyKSkKcGFjZihyZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXIpKQpzdW1tYXJ5KGxfZml0X3dsc19mb3VyaWVyKQpjaGVja3Jlc2lkdWFscyhsX2ZpdF93bHNfZm91cmllcikKYGBgCgpgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXIpCmBgYAoKYGBge3J9CiMgSW5jbHVkZSBsYWdzIG9mIHJlc2lkdWFscyBhcyBwcmVkaWN0b3JzIChhZGp1c3QgbGFncyBhcyBuZWVkZWQpCmxfZml0X3dsc19mb3VyaWVyX2FyIDwtIGxtKEtyZWRpSGFjbWkgfiBNZXZkdWF0RmFpek9yYW5pICsgdHJuZCArIHNlYXNvbmFsaXR5X3NpbiArIHNlYXNvbmFsaXR5X2NvcyArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXIpICsgc3RhdHM6OmxhZyhyZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXIpLCAyKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBrcmVkaSwgd2VpZ2h0cyA9IHdlaWdodHMpCgojIENoZWNrIGF1dG9jb3JyZWxhdGlvbiBpbiByZXNpZHVhbHMgb2YgdGhlIG5ldyBtb2RlbCAobF9maXRfd2xzX2ZvdXJpZXJfYXIpCmFjZihyZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXJfYXIpKQpwYWNmKHJlc2lkdWFscyhsX2ZpdF93bHNfZm91cmllcl9hcikpCgpgYGAKCmBgYHtyfQpkYXRhX3BhdGg9Ii9Vc2Vycy9haG1ldGNlbGlrZXIvRGVza3RvcC9JRSAzNjAgSFcxL2FyYWJhdcyIcmV0aW1pLnhsc3giCgphcmFiYWZpeWF0PXJlYWQueGxzeChkYXRhX3BhdGgpCmFyYWJhZml5YXQkVGFyaWggPC0geW0oYXJhYmFmaXlhdCRUYXJpaCkKc3RyKGFyYWJhZml5YXQpCgpgYGAKCmBgYHtyfQpzdW1tYXJ5X2RhdGE9c2tpbShhcmFiYWZpeWF0KQpwcmludChhcmFiYWZpeWF0KQpgYGAKCmBgYHtyfQphcmFiYWZpeWF0MiA8LSBhcmFiYWZpeWF0WywgLXdoaWNoKG5hbWVzKGFyYWJhZml5YXQpID09ICJUYXJpaCIpXQoKIyBDaGVjayB0aGUgc3RydWN0dXJlIG9mIHRoZSBuZXcgZGF0YSBmcmFtZQpzdHIoYXJhYmFmaXlhdDIpCmBgYApgYGB7cn0KCmNvcnJlbF9pbmZvPWNvcihhcmFiYWZpeWF0MikKCmdnY29ycnBsb3QoY29ycmVsX2luZm8sIAogICAgICAgICAgIGhjLm9yZGVyID0gVFJVRSwgCiAgICAgICAgICAgdHlwZSA9ICJsb3dlciIsCiAgICAgICAgICAgbGFiID0gVFJVRSkKYGBgCgoKYGBge3J9CmdncGxvdChhcmFiYWZpeWF0MiwgYWVzKHg9S3JlZGlGYWl6aSx5PUFyYWJhRml5YXQpKSArIGdlb21fcG9pbnQoKQpgYGAKYGBge3J9CmdncGFpcnMoYXJhYmFmaXlhdDIpCmBgYAoKCgpgYGB7cn0KbF9maXQgPSBsbShBcmFiYUZpeWF0fi4sZGF0YT1hcmFiYWZpeWF0MikKbF9maXQKCnN1bW1hcnkobF9maXQpCgpgYGAKCgpgYGB7cn0KcGxvdChsX2ZpdCkKYGBgCgpgYGB7cn0KZ2dwbG90KGFyYWJhZml5YXQyLCBhZXMoeD1LcmVkaUZhaXppLHk9QXJhYmFGaXlhdCkpICsgZ2VvbV9wb2ludCgpKyBnZW9tX3Ntb290aChtZXRob2Q9J2xtJykKCmdncGxvdChhcmFiYWZpeWF0MiwgYWVzKHg9S3JlZGlGYWl6aSx5PUFyYWJhRml5YXQpKSArIGdlb21fcG9pbnQoKSsgZ2VvbV9zbW9vdGgobWV0aG9kPSdsb2VzcycpCmBgYAoKYGBge3J9CmdncGxvdChhcmFiYWZpeWF0MiwgYWVzKHg9VXJldGltQWRldCx5PUFyYWJhRml5YXQpKSArIGdlb21fcG9pbnQoKSsgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScpCgpnZ3Bsb3QoYXJhYmFmaXlhdDIsIGFlcyh4PVVyZXRpbUFkZXQseT1BcmFiYUZpeWF0KSkgKyBnZW9tX3BvaW50KCkrIGdlb21fc21vb3RoKG1ldGhvZD0nbG9lc3MnKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoYXJhYmFmaXlhdCwgYWVzKHggPSBUYXJpaCwgeSA9IEFyYWJhRml5YXQpKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsdWUiKSArCiAgbGFicyh0aXRsZSA9ICJBcmFiYSBTYXTEscWfIEZpeWF0xLEiLCB4ID0gIlRhcmloIiwgeSA9ICJTYXTEscWfIEZpeWF0xLEiKQpgYGAKCgpgYGB7cn0KCmFyYWJhZml5YXQkQXJhYmFGaXlhdCA8LSBsb2coYXJhYmFmaXlhdCRBcmFiYUZpeWF0ICsgMSkKc3VtbWFyeShhcmFiYWZpeWF0KQoKCmxfZml0X2xvZyA8LSBsbShBcmFiYUZpeWF0fi4sIGRhdGE9YXJhYmFmaXlhdCkKCgpzdW1tYXJ5KGxfZml0X2xvZykKCgpgYGAKCmBgYHtyfQpnZ3Bsb3QoYXJhYmFmaXlhdCwgYWVzKHggPSBUYXJpaCwgeSA9IEFyYWJhRml5YXQpKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsdWUiKSArCiAgbGFicyh0aXRsZSA9ICJBcmFiYSBTYXTEscWfIEZpeWF0xLEgTG9nIFRyYW5zZm9ybWVkIiwgeCA9ICJUYXJpaCIsIHkgPSAiU2F0xLHFnyBGaXlhdMSxIExvZyIpCmBgYAoKYGBge3J9CmdncGxvdChhcmFiYWZpeWF0LCBhZXMoeCA9IFRhcmloLCB5ID0gS3JlZGlGYWl6aSkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHRpdGxlID0gIkFyYWJhIEtyZWRpIEZhaXppIiwgeCA9ICJUYXJpaCIsIHkgPSAiS3JlZGlGYWl6aSIpCmBgYAoKYGBge3J9Cgpsb2d0cmFuc2Zvcm1lZCA9IGNvcHkoYXJhYmFmaXlhdCkKbG9ndHJhbnNmb3JtZWQkS3JlZGlGYWl6aSA8LSBsb2cobG9ndHJhbnNmb3JtZWQkS3JlZGlGYWl6aSArIDEpCnN1bW1hcnkobG9ndHJhbnNmb3JtZWQpCmhlYWQobG9ndHJhbnNmb3JtZWQpCgpsX2ZpdF9sb2cgPC0gbG0oQXJhYmFGaXlhdH4uLCBkYXRhPWxvZ3RyYW5zZm9ybWVkKQoKCnN1bW1hcnkobF9maXRfbG9nKQpgYGAKYGBge3J9CmdncGxvdChsb2d0cmFuc2Zvcm1lZCwgYWVzKHggPSBUYXJpaCwgeSA9IEtyZWRpRmFpemkpKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsdWUiKSArCiAgbGFicyh0aXRsZSA9ICJLcmVkaSBGYWl6aSBMb2cgVHJhbnNmb3JtZWQiLCB4ID0gIlRhcmloIiwgeSA9ICJTYXTEscWfIEZpeWF0xLEiKQpgYGAKYGBge3J9CiJBZnRlciBhcHBseWluZyB0aGUgbG9nYXJpdGhtaWMgdHJhbnNmb3JtYXRpb24sIHRoZXJlIHdhc24ndCBhIHNpZ25pZmljYW50IGNoYW5nZSwgc28gdGhlcmUncyBubyBuZWVkIHRvIHRha2UgdGhlIGxvZ2FyaXRobSBvZiB0aGUgY3JlZGl0IGludGVyZXN0IHJhdGUgZGF0YS4iCmBgYAoKYGBge3J9CmdncGxvdChhcmFiYWZpeWF0LCBhZXMoeCA9IFRhcmloLCB5ID0gVXJldGltQWRldCkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHRpdGxlID0gIkFyYWJhIFVyZXRpbSBBZGVkaSIsIHggPSAiVGFyaWgiLCB5ID0gIlVyZXRpbSIpCmBgYAoKYGBge3J9CmxvZ3RyYW5zZm9ybWVkJFVyZXRpbUFkZXQgPC0gbG9nKGxvZ3RyYW5zZm9ybWVkJFVyZXRpbUFkZXQgKyAxKQpzdW1tYXJ5KGxvZ3RyYW5zZm9ybWVkKQpoZWFkKGxvZ3RyYW5zZm9ybWVkKQoKCmxfZml0X2xvZyA8LSBsbShBcmFiYUZpeWF0fi4sIGRhdGE9bG9ndHJhbnNmb3JtZWQpCgoKc3VtbWFyeShsX2ZpdF9sb2cpCmBgYAoKCmBgYHtyfQpnZ3Bsb3QobG9ndHJhbnNmb3JtZWQsIGFlcyh4ID0gVGFyaWgsIHkgPSBVcmV0aW1BZGV0KSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikgKwogIGxhYnModGl0bGUgPSAiQXJhYmEgVXJldGltIEFkZWRpIExvZyBUcmFuc2Zvcm1lZCIsIHggPSAiVGFyaWgiLCB5ID0gIlNhdMSxxZ8gRml5YXTEsSIpCmBgYAoKYGBge3J9CmxpYnJhcnkoZHBseXIpCgpsb2d0cmFuc2Zvcm1lZCA8LSBsb2d0cmFuc2Zvcm1lZCAlPiUgbXV0YXRlKHRybmQgPSByb3dfbnVtYmVyKCkpCgpzdW1tYXJ5KGxvZ3RyYW5zZm9ybWVkKQpsX3RyZW5kIDwtIGxtKEFyYWJhRml5YXR+IEtyZWRpRmFpemkgKyBVcmV0aW1BZGV0ICsgdHJuZCAsZGF0YT1sb2d0cmFuc2Zvcm1lZCkKc3VtbWFyeShsX3RyZW5kKQoKCmBgYApgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF90cmVuZCRyZXNpZHVhbHMpCmBgYApgYGB7cn0KbGlicmFyeSh0c2VyaWVzKQprcHNzX3Rlc3RfcmVzdWx0IDwtIGFkZi50ZXN0KHJlc2lkdWFscyhsX3RyZW5kKSwgYWx0ZXJuYXRpdmUgPSAic3RhdGlvbmFyeSIpCmtwc3NfdGVzdF9yZXN1bHQKCmBgYApgYGB7cn0KcGxvdChyZXNpZHVhbHMobF90cmVuZCkpCmFjZihyZXNpZHVhbHMobF90cmVuZCkpCnBhY2YocmVzaWR1YWxzKGxfdHJlbmQpKQoKYGBgCmBgYHtyfQpwbG90KGxfdHJlbmQpCmBgYApgYGB7cn0KbG9ndHJhbnNmb3JtZWQgPC0gYXMuZGF0YS50YWJsZShsb2d0cmFuc2Zvcm1lZCkKaGVhZChsb2d0cmFuc2Zvcm1lZCkKIyBEaWZmZXJlbmNpbmcgdGhlIHJlbGV2YW50IHZhcmlhYmxlcwpsb2d0cmFuc2Zvcm1lZGRpZmYgPC0gbG9ndHJhbnNmb3JtZWRbLCBsYXBwbHkoLlNELCBkaWZmKSwgLlNEY29scyA9IGMoIktyZWRpRmFpemkiLCAiQXJhYmFGaXlhdCIsICJVcmV0aW1BZGV0IildCiMgQ2hlY2tpbmcgdGhlIGZpcnN0IGZldyByb3dzIG9mIHRoZSBkaWZmZXJlbmNlZCBkYXRhc2V0CmhlYWQobG9ndHJhbnNmb3JtZWRkaWZmKQpsb2d0cmFuc2Zvcm1lZGRpZmZbLCB0cm5kIDo9IDE6Lk5dCgojIE1vZGVsIHdpdGhvdXQgdHJlbmQgYW5kIHdpdGggZGlmZmVyZW5jaW5nCmxfZml0X2xvZ19kaWZmPC0gbG0oQXJhYmFGaXlhdCB+IEtyZWRpRmFpemkgKyBVcmV0aW1BZGV0K3RybmQsIGRhdGEgPSBsb2d0cmFuc2Zvcm1lZGRpZmYpCgojIFN1bW1hcnkgb2YgdGhlIG1vZGVsCnN1bW1hcnkobF9maXRfbG9nX2RpZmYpCmBgYAoKCmBgYHtyfQpyZXF1aXJlKHRzZXJpZXMpCmFkZi50ZXN0KGxvZ3RyYW5zZm9ybWVkZGlmZiRBcmFiYUZpeWF0KQphZGYudGVzdChsX2ZpdF9sb2dfZGlmZiRyZXNpZHVhbHMpCiJ0ZXN0IHJlc3VsdHMgZ2l2ZSBib3RoIGFyYWJhIGZpeWF0IGFuZCByZXNpZHVhbHMgb2YgdGhlIG1vZGVsIGFyZSBzdGF0aW9uYXJ5IgpgYGAKCmBgYHtyfQpnZ3Bsb3QobG9ndHJhbnNmb3JtZWRkaWZmLCBhZXMoeD1VcmV0aW1BZGV0LHk9QXJhYmFGaXlhdCkpICsgZ2VvbV9wb2ludCgpKyBnZW9tX3Ntb290aChtZXRob2Q9J2xtJykKCmdncGxvdChsb2d0cmFuc2Zvcm1lZGRpZmYsIGFlcyh4PVVyZXRpbUFkZXQseT1BcmFiYUZpeWF0KSkgKyBnZW9tX3BvaW50KCkrIGdlb21fc21vb3RoKG1ldGhvZD0nbG9lc3MnKQpgYGAKYGBge3J9CmdncGxvdChsb2d0cmFuc2Zvcm1lZGRpZmYsIGFlcyh4PUtyZWRpRmFpemkseT1BcmFiYUZpeWF0KSkgKyBnZW9tX3BvaW50KCkrIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nKQoKZ2dwbG90KGxvZ3RyYW5zZm9ybWVkZGlmZiwgYWVzKHg9S3JlZGlGYWl6aSx5PUFyYWJhRml5YXQpKSArIGdlb21fcG9pbnQoKSsgZ2VvbV9zbW9vdGgobWV0aG9kPSdsb2VzcycpCmBgYApgYGB7cn0KcGxvdChsX2ZpdF9sb2dfZGlmZikKYGBgCgpgYGB7cn0KbF9kaWZmX2xvZ193aXRob3V0dHJlbmQgPC0gbG0oQXJhYmFGaXlhdCB+IEtyZWRpRmFpemkgKyBVcmV0aW1BZGV0ICwgZGF0YSA9IGxvZ3RyYW5zZm9ybWVkZGlmZikKc3VtbWFyeShsX2RpZmZfbG9nX3dpdGhvdXR0cmVuZCkKYGBgCmBgYHtyfQpnZ3Bsb3QobG9ndHJhbnNmb3JtZWRkaWZmLCBhZXMoeCA9IHRybmQsIHkgPSBBcmFiYUZpeWF0KSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikgKwogIGxhYnMoeCA9ICJUYXJpaCIsIHkgPSAiU2F0xLHFnyBGaXlhdMSxIikKYGBgCmBgYHtyfQp0cmFuc2Zvcm1lZF9kaWZmPWNvcHkobG9ndHJhbnNmb3JtZWRkaWZmWy1jKDExNCwxNDMsMTA2KV0pCmdncGxvdCh0cmFuc2Zvcm1lZF9kaWZmLCBhZXMoeCA9IHRybmQsIHkgPSBBcmFiYUZpeWF0KSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikgKwogIGxhYnMoeCA9ICJUYXJpaCIsIHkgPSAiU2F0xLHFnyBGaXlhdMSxIikKCmBgYApgYGB7cn0KZ2dwbG90KGxvZ3RyYW5zZm9ybWVkZGlmZiwgYWVzKHggPSBLcmVkaUZhaXppLCB5ID0gQXJhYmFGaXlhdCkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHggPSAiS3JlZGkgRmFpemkiLCB5ID0gIlNhdMSxxZ8gRml5YXTEsSIpCmBgYApgYGB7cn0KZ2dwbG90KGxvZ3RyYW5zZm9ybWVkZGlmZiwgYWVzKHggPSBVcmV0aW1BZGV0LCB5ID0gQXJhYmFGaXlhdCkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHggPSAiVXJldGltIEFkZXQiLCB5ID0gIlNhdMSxxZ8gRml5YXTEsSIpCmBgYAoKYGBge3J9CmxfZml0X2xvZ19kaWZmPC0gbG0oQXJhYmFGaXlhdCB+IEtyZWRpRmFpemkgKyBVcmV0aW1BZGV0K3RybmQsIGRhdGEgPSB0cmFuc2Zvcm1lZF9kaWZmKQpwbG90KGxfZml0X2xvZ19kaWZmKQpzdW1tYXJ5KGxfZml0X2xvZ19kaWZmKQpgYGAKYGBge3J9CndlaWdodHMgPC0gMSAvIGFicyhsX2ZpdF9sb2dfZGlmZiRyZXNpZHVhbHMpCmxfZml0X2xvZ19kaWZmX3dscyA8LSBsbShBcmFiYUZpeWF0IH4gS3JlZGlGYWl6aSArIFVyZXRpbUFkZXQgKyB0cm5kLCBkYXRhID0gdHJhbnNmb3JtZWRfZGlmZiwgd2VpZ2h0cyA9IHdlaWdodHMpCnN1bW1hcnkobF9maXRfbG9nX2RpZmZfd2xzKQpgYGAKCmBgYHtyfQpwbG90KHJlc2lkdWFscyhsX2ZpdF9sb2dfZGlmZikpCmFjZihyZXNpZHVhbHMobF9maXRfbG9nX2RpZmYpKQpwYWNmKHJlc2lkdWFscyhsX2ZpdF9sb2dfZGlmZikpCmBgYAoKYGBge3J9CnRtcD1jb3B5KHRyYW5zZm9ybWVkX2RpZmYpCnRtcFssYWN0dWFsOj1BcmFiYUZpeWF0XQp0bXBbLHByZWRpY3RlZF90cmVuZDo9cHJlZGljdChsX2ZpdF9sb2dfZGlmZl93bHMsdG1wKV0KdG1wWyxyZXNpZHVhbF90cmVuZDo9YWN0dWFsLXByZWRpY3RlZF90cmVuZF0KI2hlYWQodG1wKQpnZ3Bsb3QodG1wICxhZXMoeD10cm5kKSkgKwogICAgICAgIGdlb21fbGluZShhZXMoeT1hY3R1YWwsY29sb3I9J3JlYWwnKSkgKyAKICAgICAgICBnZW9tX2xpbmUoYWVzKHk9cHJlZGljdGVkX3RyZW5kLGNvbG9yPSdwcmVkaWN0ZWQnKSkKYGBgCgoKYGBge3J9CmRhdGFfcGF0aD0iL1VzZXJzL2FobWV0Y2VsaWtlci9EZXNrdG9wL0lFIDM2MCBIVzEvbTFwYXJhYXJ6xLHEsS54bHN4IgoKZGF0YT1yZWFkLnhsc3goZGF0YV9wYXRoKQoKc3RyKGRhdGEpCmBgYAoKYGBge3J9CmNvbnZlcnRfdG9feW1kIDwtIGZ1bmN0aW9uKGRhdGVfc3RyaW5nKSB7CiAgCiAgZm9ybWF0dGVkX2RhdGUgPC0gYXMuRGF0ZShkYXRlX3N0cmluZywgZm9ybWF0ID0gIiVkLSVtLSVZIikKICAKICByZXR1cm4oZm9ybWF0dGVkX2RhdGUpCn0KCgpkYXRhJFRhcmloIDwtIGNvbnZlcnRfdG9feW1kKGRhdGEkVGFyaWgpIAoKaGVhZChkYXRhKQpzdHIoZGF0YSkKCmBgYAoKYGBge3J9CmdncGxvdChkYXRhLCBhZXMoeCA9IFRhcmloLCB5ID0gS3JlZGlLYXJ0xLFIYXJjYW1hKSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikKYGBgCgoKCmBgYHtyfQpnZ3Bsb3QoZGF0YSwgYWVzKHggPSBUYXJpaCwgeSA9IFBhcmFBcnrEsSkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpCmBgYAoKCgoKYGBge3J9CmdncGxvdChkYXRhLCBhZXMoeCA9IFRhcmloLCB5ID0gRWxla3RyaWtUw7xrZXRpbSkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpCmBgYAoKCgpgYGB7cn0KZGF0YTIgPC0gc3Vic2V0KGRhdGEsIHNlbGVjdCA9IC1UYXJpaCkKCmNvcnJlbF9pbmZvPWNvcihkYXRhMikKCmdnY29ycnBsb3QoY29ycmVsX2luZm8sIAogICAgICAgICAgIGhjLm9yZGVyID0gVFJVRSwgCiAgICAgICAgICAgdHlwZSA9ICJsb3dlciIsCiAgICAgICAgICAgbGFiID0gVFJVRSkKYGBgCgpgYGB7cn0KZ2dwYWlycyhkYXRhKQpgYGAKYGBge3J9CmxfZml0ID0gbG0oS3JlZGlLYXJ0xLFIYXJjYW1hfi4sZGF0YT1kYXRhKQpzdW1tYXJ5KGxfZml0KQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSwgYWVzKHg9S3JlZGlLYXJ0xLFIYXJjYW1hLHk9UGFyYUFyesSxKSkgKyBnZW9tX3BvaW50KCkrZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScpCmBgYApgYGB7cn0KZ2dwbG90KGRhdGEsIGFlcyh4PUtyZWRpS2FydMSxSGFyY2FtYSx5PUVsZWt0cmlrVMO8a2V0aW0pKSArIGdlb21fcG9pbnQoKStnZW9tX3Ntb290aChtZXRob2Q9J2xtJykKYGBgCgpgYGB7cn0KcGxvdChsX2ZpdCkKYGBgCgpgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXQpCmBgYAoKCmBgYHtyfQpkYXRhIDwtIGFzLmRhdGEudGFibGUoZGF0YSkKZGF0YVssIHRybmQgOj0gMTouTl0KZGF0YVssYXk6PWFzLmNoYXJhY3Rlcihtb250aChUYXJpaCxsYWJlbD1UKSldCmRhdGFbLCB5aWwgOj0gYXMuY2hhcmFjdGVyKGZvcm1hdChUYXJpaCwgIiVZIikpXQpkYXRhWywgbG9nX1BhcmFBcnrEsSA6PSBsb2coUGFyYUFyesSxKV0KZGF0YVssIGxvZ19LcmVkaUthcnTEsUhhcmNhbWEgOj0gbG9nKEtyZWRpS2FydMSxSGFyY2FtYSldCmhlYWQoZGF0YSkKYGBgCgoKYGBge3J9CgoKbF9maXRfbG9nIDwtIGxtKGxvZ19LcmVkaUthcnTEsUhhcmNhbWEgfiBsb2dfUGFyYUFyesSxICsgRWxla3RyaWtUw7xrZXRpbSAsIGRhdGE9ZGF0YSkKCgpzdW1tYXJ5KGxfZml0X2xvZykKCgpnZ3Bsb3QoZGF0YSwgYWVzKHg9bG9nX1BhcmFBcnrEsSx5PWxvZ19LcmVkaUthcnTEsUhhcmNhbWEpKSArIApnZW9tX3BvaW50KCkgKyAKZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScpCgoKcGxvdChsX2ZpdF9sb2cpCgpgYGAKCmBgYHtyfQpjaGVja3Jlc2lkdWFscyhsX2ZpdF9sb2cpCmBgYApgYGB7cn0KZGF0YSRUcmVuZF8zX0F5bGlrIDwtIHJvbGxtZWFuKGRhdGEkS3JlZGlLYXJ0xLFIYXJjYW1hLCAzLCBmaWxsID0gTkEpCmRhdGEkVHJlbmRfNl9BeWxpayA8LSByb2xsbWVhbihkYXRhJEtyZWRpS2FydMSxSGFyY2FtYSwgNiwgZmlsbCA9IE5BKQoKbF9maXRfdHJlbmQgPC0gbG0obG9nX0tyZWRpS2FydMSxSGFyY2FtYSB+IEVsZWt0cmlrVMO8a2V0aW0rbG9nX1BhcmFBcnrEsSsgVHJlbmRfM19BeWxpayArIFRyZW5kXzZfQXlsaWssIGRhdGE9ZGF0YSkKCgpzdW1tYXJ5KGxfZml0X3RyZW5kKQoKYGBgCgpgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXRfdHJlbmQpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhLCBhZXMoeD1UYXJpaCAsIHkgPSBsb2dfS3JlZGlLYXJ0xLFIYXJjYW1hKSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikKYGBgCmBgYHtyfQpnZ3Bsb3QoZGF0YSwgYWVzKHg9VGFyaWggLCB5ID0gbG9nX1BhcmFBcnrEsSkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpCmBgYAoKYGBge3J9CmxfZml0X3RyZW5kX2NhdGhlZ29yaWNhbCA8LSBsbShsb2dfS3JlZGlLYXJ0xLFIYXJjYW1hIH4gRWxla3RyaWtUw7xrZXRpbStsb2dfUGFyYUFyesSxKyBUcmVuZF8zX0F5bGlrICsgVHJlbmRfNl9BeWxpaytheSt5aWwsIGRhdGE9ZGF0YSkKc3VtbWFyeShsX2ZpdF90cmVuZF9jYXRoZWdvcmljYWwpCmBgYAoKYGBge3J9CmNoZWNrcmVzaWR1YWxzKGxfZml0X3RyZW5kX2NhdGhlZ29yaWNhbCkKYGBgCmBgYHtyfQoKZGF0YSRLcmVkaUthcnTEsUhhcmNhbWFfNF9BeWxpa19HZWNpa21lbGkgPC0gbGFnKGRhdGEkS3JlZGlLYXJ0xLFIYXJjYW1hLCA0KQpkYXRhJEtyZWRpS2FydMSxSGFyY2FtYV82X0F5bGlrX0dlY2lrbWVsaSA8LSBsYWcoZGF0YSRLcmVkaUthcnTEsUhhcmNhbWEsIDYpCmhlYWQoZGF0YSkKbF9maXRfZ2VjaWttZWxpIDwtIGxtKGxvZ19LcmVkaUthcnTEsUhhcmNhbWEgfiBFbGVrdHJpa1TDvGtldGltICsgbG9nX1BhcmFBcnrEsSArIEtyZWRpS2FydMSxSGFyY2FtYV82X0F5bGlrX0dlY2lrbWVsaStUcmVuZF8zX0F5bGlrICtheSt5aWwsIGRhdGE9ZGF0YSkKCgpzdW1tYXJ5KGxfZml0X2dlY2lrbWVsaSkKCmBgYAoKYGBge3J9CmNoZWNrcmVzaWR1YWxzKGxfZml0X2dlY2lrbWVsaSkKYGBgCmBgYHtyfQpsX2ZpdF9nZWNpa21lbGkgPC0gbG0obG9nX0tyZWRpS2FydMSxSGFyY2FtYSB+IGxvZyhFbGVrdHJpa1TDvGtldGltKSArIGxvZ19QYXJhQXJ6xLEgKyBLcmVkaUthcnTEsUhhcmNhbWFfNl9BeWxpa19HZWNpa21lbGkgKyBUcmVuZF8zX0F5bGlrICsgYXkgKyB5aWwsIGRhdGE9ZGF0YSkKc3VtbWFyeShsX2ZpdF9nZWNpa21lbGkpCmBgYApgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXRfZ2VjaWttZWxpKQpgYGAKCgoKCgoK